home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-04 / smalltlk.zip / PRELUDE / PROCESS.ST < prev    next >
Text File  |  1987-06-17  |  1KB  |  45 lines

  1. Class  Process
  2.  
  3. [  block
  4.     (self state == #TERMINATED)
  5.         ifTrue: [self termErr: 'block'.  ^ nil].
  6.     <SetProcessState  self 2>.
  7.     ^ self state
  8.  
  9. |  resume
  10.     (self state == #TERMINATED)
  11.         ifTrue: [self termErr: 'resume'.  ^ nil].
  12.     <SetProcessState  self 0>.
  13.     ^ self state
  14.  
  15. |  suspend
  16.     (self state == #TERMINATED)
  17.         ifTrue: [self termErr: 'suspend'.  ^ nil].
  18.     <SetProcessState  self 1>.
  19.     ^ self state
  20.  
  21. |  state  | pstate |
  22.     pstate <- <ReturnProcessState  self>.
  23.     (pstate = 0) ifTrue: [pstate <- #READY.  ^ pstate].
  24.     (pstate = 1) ifTrue: [pstate <- #SUSPENDED.  ^ pstate].
  25.     (pstate = 2) ifTrue: [pstate <- #BLOCKED.  ^ pstate].
  26.     (pstate = 3) ifTrue: [pstate <- #BLOCKED.  ^ pstate].
  27.     (pstate >= 4) ifTrue: [pstate <- #TERMINATED.  ^ pstate]
  28.  
  29. |  terminate
  30.     <Terminate self>.
  31.     ^ self state
  32.  
  33. |  termErr: msgName
  34.     ('Cannot ',msgName,' a terminated process.') print
  35.  
  36. |  unblock
  37.     (self state == #TERMINATED)
  38.         ifTrue: [self termErr: 'unblock'.  ^ nil].
  39.     <SetProcessState  self 3>.
  40.     ^ self state
  41.  
  42. |  yield
  43.     ^ nil
  44. ]
  45.